package com.neo.push.core.connection;

import com.neo.push.core.RegisterMessage;
import com.neo.push.core.TextMessage;
import io.netty.channel.ChannelHandlerContext;

/**
 * Created by lock on 17-7-11.
 *
 *
 * 表示一个应用层面的连接信息
 *
 *
 */
public interface SocketConnection {

    /**
     * 获取当前连接的ID
     * @return
     */
    String id();

    /**
     * 发送一个文本消息
     * @param message
     */
    void writeMessage(final TextMessage message);

    /**
     * 接收到一个消息
     * @param message
     */
    void acceptMessage(final TextMessage message);

    /**
     * 处理错误
     * @param throwable
     */
    void handleThrowable(Throwable throwable);

    /**
     * 添加消息处理器
     * @param handler
     * @return
     */
    SocketConnection addMessageHandler(MessageAcceptor handler);


    /**
     * 返回当前连接的ChannelHandlerContext
     * @return
     */
    ChannelHandlerContext ctx();
    /**
     * 关闭一个连接
     */
    void close();

    /**
     * 连接处理一个注册信息
     * @param registerMessage
     * @throws Exception
     */
    void register(RegisterMessage registerMessage) throws Exception;

}
